package com.hoe.tsb.fraft.serialize;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * <p>
 * 枚举序列化器
 * </p>
 *
 * @author hoe
 * @version 1.0
 * @date 2022/11/22
 */
public interface EnumsSerializer<E extends Enum<E>>  {

    default Integer serialize(Enum<E> t) {
        return t.ordinal();
    }

    default Enum<E> deserialize(Integer buf) {
        @SuppressWarnings("unchecked")
        Class<E> eCls = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        E[] enumConstants = eCls.getEnumConstants();
        return enumConstants[buf];
    }
}
